A storage controller is a physical processing device that is used to store and retrieve data on behalf of one or more hosts. A network storage controller can be configured (e.g., by hardware, software, firmware, or any combination thereof) to operate as a storage server that serves one or more clients on a network, to store and manage data in a set of mass storage devices, such as magnetic or optical storage-based disks, tapes, or flash memory. Storage of data in the set of mass storage devices can be implemented as one or more storage volumes defining an overall logical arrangement of disk space.
Some storage servers are designed to service file-level requests from hosts, as is commonly the case with file servers used in a network attached storage (NAS) environment. Other storage servers are designed to service block-level requests from hosts, as with storage servers used in a storage area network (SAN) environment. Still other storage servers are capable of servicing both file-level requests and block-level requests, as is the case with certain storage servers made by NetApp®, Inc. of Sunnyvale, Calif., employing the Data ONTAP® storage operating system.
It is beneficial for a storage administrator to predict performance of a network storage system under a given load. This is particularly relevant to utilizing all of the available storage provided by a storage server. For example, if a storage administrator wants to make more use of a storage server's available storage capacity (e.g., increase the number of read/write operations the storage server handles), it is important in order to meet service level objectives (SLOs) to determine whether the storage server will become saturated (the situation in which read/write requests are received faster than they can be processed). Thus, in planning where to increase or decrease workloads, performance prediction can be important. However, predicting the performance of an operational storage system under changing workload characteristics is difficult.
To predict storage system performance, attempts have been made to model storage system as a “black-box” using either a relative fitness model or a queuing model. In the relative fitness model, the behavior of one storage system is scaled to fit another storage system. For example, the latency in storage system A is scaled to the characteristics of storage system B. Then, by observing certain measurable counters in storage system A, the latency in the storage system B is predicted. The scaling from one storage system to another creates a model that does not take the actual performance of storage system B into consideration and therefore creates prediction of the storage system B that may be inaccurate.
In the queuing model based approach, components of a generic storage system are modeled as a queue (i.e., each component is represented by a pause in the processing flow). The parameters of the model queue are set according to the response time of the components in the storage system for which the model is to be created. To predict the performance of the storage system, a sample workload is processed through the queue of components. However, due to the static nature of the parameters used in creating the queue, the queuing model based approach does not adapt well to changing workload characteristics.